package com.itheima.finaldemo;

public class Test1 {

    //1.final修饰静态成员变量，这个变量称为常量，
    //  可以记住一个固定值，并且程序中不可修改，通常这个值作为系统的配置信息
    //2.常量的名称，建议全大写，多个单词用下划线隔开
    //
    public static final String SCHOOL_NAME = "黑马程序员";
    //SCHOOL_NAME = "白马程序员";  //报错

    //final修饰实例成员变量（一般没有意义）
    private final int number = 3;

    public static void main(String[] args) {

        //目标：认识final关键字的作用

        //3.final修饰的变量有且仅能被赋值一次
        //变量分类：
        //  1.成员变量：静态成员变量、实例成员变量
        //  2.局部变量：方法内部定义的变量

        final double rate = 3.14;
        //rate = 3.14159;  //报错

        show(0.8);

        Test1 t = new Test1();
        System.out.println(t.number);
        //t.number = 5;  //报错

        //注意：1.final修饰基本类型的变量，变量存储的数据不能被修改
        //      2.final修饰引用类型的变量，变量存储的地址不能被修改，但是地址所指向的对象的数据可以修改

        final  String str = "黑马";
        //str = "白马";  //报错

        final int[] arr = {1,2,3};
        //arr = new int[]{5, 6, 7};  //报错
        arr[0] = 5;
        System.out.println(arr[0]);
    }

    public static void show(final double d) {
        //d = 0.9;  //报错
        System.out.println(d);
    }
}

//1.final修饰的类不能被继承（常用于工具类）
final class A {

}
//报错
/*
class B extends A {

}*/

//2.final修饰的的方法不能被重写
class C {
    public final void show() {
        System.out.println("C类的show方法");
    }
}
class D extends C {
    //报错
    /*
    public void show() {
        System.out.println("D类的show方法");
    }*/
}
